package sendtemplateinterfacelogic

import (
	"context"
	"fmt"

	"dfx_cmdb/cmdb-sendmsg-rpc/internal/svc"
	cmdb_database_sync "dfx_cmdb/cmdb-sendmsg-rpc/types/cmdb-database-sync"
	"dfx_cmdb/models"
	cmdbsendmsg "dfx_cmdb/models/cmdb-sendmsg"

	"github.com/zeromicro/go-zero/core/logx"
)

type DeleteSendTemplateLogic struct {
	ctx    context.Context
	svcCtx *svc.ServiceContext
	logx.Logger
}

func NewDeleteSendTemplateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DeleteSendTemplateLogic {
	return &DeleteSendTemplateLogic{
		ctx:    ctx,
		svcCtx: svcCtx,
		Logger: logx.WithContext(ctx),
	}
}

// DeleteSendTemplate 删除指定的发送模板
func (l *DeleteSendTemplateLogic) DeleteSendTemplate(in *cmdb_database_sync.DeleteRequest) (*cmdb_database_sync.PublicMsgResponse, error) {
	var sendTemplate []cmdbsendmsg.SendTemplate

	for _, v := range in.IDs {
		// 只检查记录是否存在，不需要获取完整记录
		var count int64
		if err := l.svcCtx.DB.Model(&cmdbsendmsg.SendTemplate{}).Where("id = ?", v).Count(&count).Error; err != nil {
			logx.Errorf("查询发送模板失败：%v", err)
			return &cmdb_database_sync.PublicMsgResponse{
				Msg: "查询发送模板失败",
			}, err
		}

		if count == 0 {
			logx.Errorf("发送模板不存在，ID: %v", v)
			return &cmdb_database_sync.PublicMsgResponse{
				Msg: "发送模板不存在",
			}, fmt.Errorf("发送模板不存在")
		}

		// 如果存在，则添加到待删除列表
		var _sendTemplate = &cmdbsendmsg.SendTemplate{}
		_sendTemplate.ID = v
		sendTemplate = append(sendTemplate, *_sendTemplate)
	}

	if err := models.DeleteDatabase(l.svcCtx.DB, sendTemplate); err != nil {
		logx.Errorf("删除数据失败：%v", err)
		return &cmdb_database_sync.PublicMsgResponse{
			Msg: "删除发送模板失败",
		}, err
	}
	logx.Infof("删除数据成功，删除%v条数据", len(sendTemplate))
	return &cmdb_database_sync.PublicMsgResponse{
		Msg: fmt.Sprintf("删除发送模板成功，删除%v条数据", len(sendTemplate)),
	}, nil
}
